<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>AngelScript: Registering object properties</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">AngelScript
   
   </div>
   
  </td>
  
  
  
   
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('doc_reg_objprop.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Registering object properties </div>  </div>
</div>
<div class="contents">
<div class="textblock"><p>Class member variables can be registered so that they can be directly accessed by the script without the need for any method calls.</p>
<div class="fragment"><pre class="fragment"><span class="keyword">struct </span>MyStruct
{
  <span class="keywordtype">int</span> a;
};

r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a33f3cd249307f5f11120a395579410f6" title="Registers a property for the object type.">RegisterObjectProperty</a>(<span class="stringliteral">&quot;mytype&quot;</span>, <span class="stringliteral">&quot;int a&quot;</span>, <a class="code" href="angelscript_8h.html#a717eccea17214bc1eb64bb9789c4915a" title="Returns the offset of an attribute in a struct.">asOFFSET</a>(MyStruct,a)); assert( r &gt;= 0 );
</pre></div><p>It is also possible to expose properties through <a class="el" href="doc_script_class_prop.html">property accessors</a>, which are a pair of class methods with prefixes get_ and set_ for getting and setting the property value. These methods should be registered with <a class="el" href="doc_register_func.html">RegisterObjectMethod</a>. This is especially useful when the offset of the property cannot be determined, or if the type of the property is not registered in the script and some translation must occur, i.e. from <code>char*</code> to <code>string</code>.</p>
<p>If the application class contains a C++ array as a member, it may be advantageous to expose the array through <a class="el" href="doc_script_class_prop.html">indexed property accessors</a> rather than attempting to matching the C++ array type to a registered type in AngelScript. To do this you can create a couple of simple proxy functions that will translate to the array access.</p>
<div class="fragment"><pre class="fragment"><span class="keyword">struct </span>MyStruct
{
  <span class="keywordtype">int</span> array[16];
};

<span class="comment">// Write a couple of proxy </span>
<span class="keywordtype">int</span> MyStruct_get_array(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx, MyStruct *o)
{
  <span class="keywordflow">if</span>( idx &gt;= 16 ) <span class="keywordflow">return</span> 0;
  <span class="keywordflow">return</span> o-&gt;array[idx];
}

<span class="keywordtype">void</span> MyStruct_set_array(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx, <span class="keywordtype">int</span> value, MyStruct *o)
{
  <span class="keywordflow">if</span>( idx &gt;= 16 ) <span class="keywordflow">return</span>;
  o-&gt;array[idx] = value;
}

<span class="comment">// Register the proxy functions as member methods</span>
r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a6686c12ef37f4a4b1f9e90997b4756d0" title="Registers a method for the object type.">RegisterObjectMethod</a>(<span class="stringliteral">&quot;mytype&quot;</span>, <span class="stringliteral">&quot;int get_array(uint)&quot;</span>, <a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae" title="Returns an asSFuncPtr representing the function specified by the name.">asFUNCTION</a>(MyStruct_get_array), <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4ac08652c72f1cc0dc81c37812fab0e253" title="A cdecl function that takes the object pointer as the last parameter.">asCALL_CDECL_OBJLAST</a>); assert( r &gt;= 0 );
r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a6686c12ef37f4a4b1f9e90997b4756d0" title="Registers a method for the object type.">RegisterObjectMethod</a>(<span class="stringliteral">&quot;mytype&quot;</span>, <span class="stringliteral">&quot;void set_array(uint, int)&quot;</span>, <a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae" title="Returns an asSFuncPtr representing the function specified by the name.">asFUNCTION</a>(MyStruct_set_array), <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4ac08652c72f1cc0dc81c37812fab0e253" title="A cdecl function that takes the object pointer as the last parameter.">asCALL_CDECL_OBJLAST</a>); assert( r &gt;= 0 );
</pre></div> </div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>

    <li class="footer">Generated on Sun Jan 29 2012 15:41:04 for AngelScript by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
